/**
 * Created by vincent on 2016/12/22.
 */
var Pagination = function () {
    var pagination = {};
    pagination.pageSize = 10;
    pagination.showFlag = true;
    pagination.length = 0;
    pagination.click = function () {
    };

    function isFunction(fn) {
        return Object.prototype.toString.call(fn) === '[object Function]';
    }

    function isArray(obj) {
        return Object.prototype.toString.call(obj) === '[object Array]';
    }

    pagination.currentPageNo = 1;
    pagination.firstPageNo = 1;
    pagination.lastPageNo = 1;

    pagination.setShowFlag = function (showFlag) {
        pagination.showFlag = !!showFlag;
    };

    pagination.setCurrentPage = function (pageNo) {
        pagination.currentPageNo = pageNo;
        $("ul.pagination a").blur();
    };

    pagination.setPageSize = function (pageSize) {
        pagination.pageSize = pageSize;
    };

    pagination.currentPage = function () {
        pagination.click(pagination.currentPageNo);
    };

    pagination.firstPage = function () {
        if (!pagination.firstPageTag()) {
            pagination.click(1);
        }
    };

    pagination.firstPageTag = function () {
        return pagination.currentPageNo == 1;
    };

    pagination.prePage = function () {
        pagination.click(pagination.currentPageNo - 1);
    };

    pagination.prePageTag = function () {
        return pagination.currentPageNo - 1 > 0;
    };

    pagination.prePage2 = function () {
        pagination.click(pagination.currentPageNo - 2);
    };

    pagination.prePage2Tag = function () {
        return pagination.currentPageNo - 2 > 0;
    };

    pagination.nextPage = function () {
        pagination.click(pagination.currentPageNo + 1);
    };

    pagination.nextPageTag = function () {
        return pagination.currentPageNo + 1 <= pagination.lastPageNo;
    };

    pagination.nextPage2 = function () {
        pagination.click(pagination.currentPageNo + 2);
    };

    pagination.nextPage2Tag = function () {
        return pagination.currentPageNo + 2 <= pagination.lastPageNo;
    };

    pagination.lastPage = function () {
        if (!pagination.lastPageTag()) {
            pagination.click(pagination.lastPageNo);
        }
    };
    pagination.lastPageTag = function () {
        return pagination.currentPageNo == pagination.lastPageNo;
    };

    pagination.targetPage = function () {
        if (!isNaN(pagination.targetPageNo)
            && pagination.firstPageNo <= parseInt(pagination.targetPageNo)
            && parseInt(pagination.targetPageNo) <= pagination.lastPageNo) {
            pagination.click(parseInt(pagination.targetPageNo));
        }
    };

    pagination.setPage = function (pageResult, pageNo) {
        if (!pageNo || pageNo < 1) {
            pageNo = 1;
        }
        if (isArray(pageResult.datas)) {
            pagination.firstPageNo = 1;
            pagination.setCurrentPage(pageNo);
            pagination.lastPageNo = Math.ceil(pageResult.total / pagination.pageSize);
            pagination.length = pageResult.total;
        } else {
            pagination.showFlag = false;
        }
    };

    pagination.setPageClickFn = function (clickFn) {
        if (isFunction(clickFn)) {
            pagination.click = clickFn;
        }
    };

    return pagination;
};
